/**
 * 内置对象
 * Built-in  --> 内置
 * DOM       --> Document Object Model 页面文档对象模型
 * BOM       --> Browser Object Model  浏览器文档对象模型
 */

// Math.random() 获取范围在[0, 1)内的随机值
for (let i = 0; i < 10; i++) {
    var number = Math.random();
    console.log(number)
}
// 0.6781282878735804
// 0.9931913246025847
// 0.15446632556843976

// 获取执行范围内的随机整数
for (let i = 0; i < 5; i++) {
    number = Math.floor(Math.random() * (10 - 1 + 1)) + 1;
    console.log(number)
}

// 日期对象
// Date对象和Math对象不一样, Date是一个构造函数, 需要实例化后才能使用其中具体方法和属性
// 可以理解为Math为静态工具类 | Date不是静态类, 所以使用必须要实例化

//

// 获取当前时间必须实例化
console.log("Date(): " + Date())            // Date(): Fri Nov 12 2021 08:32:31 GMT+0800 (中国标准时间)

// 单单一个  Date 是一个构造函数, 如何理解
console.log("Date: " + Date)                // Date: function Date() { [native code] }
console.log("new Date(): " + new Date())    // new Date(): Fri Nov 12 2021 08:32:31 GMT+0800 (中国标准时间)

// 获取指定时间的日期对象
var s = new Date('2019/5/1');   // 2019-04-30T16:00:00.000Z
console.log(s);


/**
 * instanceof 可以判断一个对象是否是某个构造函数的实例
 */
var arr = [1, 12];
var obj = {};
console.log(`arr instanceof Array: ${arr instanceof Array}`); // true
console.log(`obj instanceof Array: ${obj instanceof Array}`); // false

/**
 * Array.isArray() 用于判断一个对象是否为数组
 */
console.log(`Array.isArray(arr): ${Array.isArray(arr)}`); // true
console.log(`Array.isArray(obj): ${Array.isArray(obj)}`); // false

/**
 * 添加删除数组元素的方法
 * 下面四种方法都修改了原数组!!!
 * push(参数1...)  ->  添加   在数组尾部添加一个或多个元素     return: 并返回新的长度
 * pop()          ->  删除   删除数组最后一个元素            return: 返回它删除的元素的值
 * #
 * unshift(参数1...)  -> 添加   在数组头部添加一个或多个元素     return: 并返回新的长度
 * shift()           -> 删除    删除数组第一个元素             return: 返回第一个元素的值
 */
var newLength = arr.push(-1, 0);
console.log(`newLength: ${newLength}`);
console.log(arr);                       // [ 1, 12, -1, 0 ]

var unshiftNewLength = arr.unshift(-10, -5, -4);
console.log(`unshiftNewLength: ${unshiftNewLength}`);
console.log(arr);


/**
 * 数组索引方法
 * indexOf()函数签名        数组中查找给定元素的第一个索引, 不存在返回-1
 * indexOf(searchElement: T, fromIndex?: number): number;
 *#
 * lastIndexOf()函数签名    数组中查找给定元素的最后一个索引, 不存在返回-1
 * lastIndexOf(searchElement: T, fromIndex?: number): number;
 */

var strArr = ['1', '2', '3', '4', '5', '6', '3'];
console.log(`strArr.indexOf('3'): ${strArr.indexOf('3')}`);     // strArr.indexOf('3'): 2
console.log(`strArr.lastIndexOf(): ${strArr.lastIndexOf('3')}`);// strArr.lastIndexOf(): 6


/**
 * 数组转出字符串
 * toString()           把数组转换成字符串, 用逗号分隔每一项
 * #
 * join(separator?: string): string;
 * join('分隔符')        把数组转换成字符串, 自定义分隔符, join不传入参数, 则分隔符为 , 逗号
 */

console.log(`strArr.toString(): ${strArr.toString()}`); // strArr.toString(): 1,2,3,4,5,6,3
console.log(`strArr.join(''): ${strArr.join('')}`);     // strArr.join(''): 1234563
console.log(`strArr.join('-'): ${strArr.join('-')}`);   // strArr.join('-'): 1-2-3-4-5-6-3

/**
 * 单词   slice -> 切, 裁       splice -> 拼接
 * #
 * concat() 连接两个或多个数组                   返回一个新的数组
 * slice()  数组截取slice(begin, end)           返回被截取项目的新数组
 * splice() 数组删除splice(begin, delCount)     返回被删除的新数组, 注意. 这个会影响到原数组
 */

var arr01 = ['a', 'b', 'c', 'd', 'e', 'f', 'g'];
var arr02 = ['h', 'i', 'j', 'k', 'm', 'l', 'n'];
console.log(`Before ------- arr02: ${arr02.toString()}`)// // Before ------- arr02: h,i,j,k,m,l,n

var newArr = arr02.splice(0, 4);
console.log(`After ------- arr02: ${arr02.toString()}`) // After ------- arr02: m,l,n
console.log(`newArr: ${newArr.toString()}`)             // newArr: h,i,j,k
